package edu.stanford.prpl.api;

import java.io.Serializable;
import java.util.Calendar;

public interface Resource extends PRPLObject, Serializable {

	void addMetaData(String propertyURI, Object... values);

	void addTags(String... tags);

	void addType(String typeURI);

	BlobResource asBlobResource();

	boolean canAccess(Group group);

	boolean canAccess(Identity identity);

	Calendar getLastModifiedDate();

	Object[] getMetaData(String propertyURI);

	String[] getMetaDataProperties();

	String getName();

	Identity getOwner();

	Group[] getSharingGroups();

	Identity[] getSharingIdentities();

	String[] getTags();

	String[] getTypes();

	boolean isOwn();
	
	void removeMetaData(String propertyURI, Object... values);

	void removeType(String typeURI);

	void setLastModifiedDate(Calendar date);

	void setMetaData(String propertyURI, Object... values);

	// void setTags(String... topics);

	void setName(String name);

	void shareWith(Group group);

	void shareWith(Identity identity);

	void unshareWith(Group group);

	void unshareWith(Identity identity);
}
